package com.zhaungjie.base.utils;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * 同步排序
 *
 * @author zhuangjie
 * @date 2024/03/15
 */
public class SyncSort {
    /**
     * 主列表与从列表长度是一样的，在排序时主列表在排序时怎么交换元素从列表中的列表也要同步操作
     * @param mainList 主列表
     * @param entourageLists 从列表
     */
    public static<T> void sort(Comparator<T> comparator, List<T> mainList, List<?> ... entourageLists) {
        // 验证输入的安全性
        if (comparator == null || mainList == null ) {
            throw new IllegalArgumentException("参数不合法");
        }
        for (List<?> list : entourageLists) {
            if (mainList.size() != list.size()) {
                throw new IllegalArgumentException("主列表与从列表长度不一致");
            }
        }

        if (mainList.isEmpty()) return;

        //假设已有一些元素在list中，例如list.add(3),list.add(1),list.add(2)，这只是一个假设，实际您可以再这个基础上增加其他数字
        for (int i = 0; i < mainList.size() - 1; i++) {
            for (int j = 0; j < mainList.size() - 1 - i; j++) {
                if ( comparator.compare(mainList.get(j), mainList.get(j + 1)) > 0) {
                    // 交换list[j]和list[j+1]
                    swap(mainList, j, j + 1);
                    for (List<?> entourageList : entourageLists) {
                        swap(entourageList, j, j + 1);
                    }
                }
            }
        }


    }

    /**
     * 交换
     * @param
     */
    private static<T> void swap(List<T> list,int i,int j) {
        T temp = list.get(i);
        list.set(i, list.get(j));
        list.set(j, temp);
    }

    public static void main(String[] args) {
        List<Integer> mainList = Arrays.asList(100, 200);
        List<Integer> entourageList = Arrays.asList(1, 2);

        sort((o1,o2)->o2 -o1, mainList, entourageList);
        System.out.println();
    }
}
